import { DataSource } from 'typeorm';
import { TaskComment, TaskCommentReply, User } from '../../../entities';
import { logApp } from '../../../utils/logger';

/**
 * 任务评论回复数据种子
 */
export class TaskCommentReplySeed {
  constructor(private dataSource: DataSource) {}

  /**
   * 运行任务评论回复种子
   */
  async run(): Promise<void> {
    console.log('开始初始化任务评论回复数据...');

    // 获取存储库
    const taskCommentRepository = this.dataSource.getRepository(TaskComment);
    const userRepository = this.dataSource.getRepository(User);
    const replyRepository = this.dataSource.getRepository(TaskCommentReply);

    // 查找所有评论
    const comments = await taskCommentRepository.find({
      take: 10,  // 仅为部分评论添加回复
    });

    if (comments.length === 0) {
      console.log('未找到任务评论，跳过评论回复初始化');
      return;
    }

    // 查找用户
    const users = await userRepository.find();
    if (users.length === 0) {
      console.log('未找到用户，跳过评论回复初始化');
      return;
    }

    // 回复内容模板
    const replyContents = [
      '谢谢您的反馈，我们会尽快处理。',
      '已经开始解决这个问题，预计明天可以完成。',
      '这个问题比较复杂，需要更多时间分析。',
      '我同意您的观点，这个功能确实需要优化。',
      '已经修复了这个问题，请再次确认。',
      '我们需要更多的信息来解决这个问题。',
      '我已将此问题转给相关团队处理。',
      '非常感谢您的建议，我们会考虑在下一版本中实现。',
      '这个问题已经在我们的待办事项中，将优先处理。',
      '我们正在进行相关调查，会尽快给您回复。'
    ];

    // 为每个评论随机添加1-3条回复
    for (const comment of comments) {
      const replyCount = Math.floor(Math.random() * 3) + 1; // 1-3条回复
      
      for (let i = 0; i < replyCount; i++) {
        // 随机选择用户和回复内容
        const user = users[Math.floor(Math.random() * users.length)];
        const content = replyContents[Math.floor(Math.random() * replyContents.length)];
        
        try {
          // 创建回复实体
          const reply = new TaskCommentReply();
          reply.content = content;
          reply.commentId = comment.id;
          reply.userId = user.id;
          
          // 保存到数据库
          await replyRepository.save(reply);
          console.log(`添加评论回复: "${content.substring(0, 20)}..." 到评论ID: ${comment.id}`);
        } catch (error) {
          logApp('评论回复添加失败', { error: error.message, commentId: comment.id, userId: user.id });
          console.error(`无法添加评论回复: ${error.message}`);
        }
      }
    }

    console.log('任务评论回复数据初始化完成');
  }
} 